home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -seriously_amiga- / shareware / programming / e / easyplugins / source / dclistview.e < prev    next >
Text File  |  1997-12-06  |  5KB  |  147 lines

  1. OPT MODULE, PREPROCESS, OSVERSION=37
  2.  
  3. MODULE 'gadtools', 'libraries/gadtools', 'devices/inputevent',
  4.        'intuition/gadgetclass', 'intuition/intuition', 'utility/tagitem',
  5.        'tools/EasyGUI', 'tools/textlen', 'tools/ctype', 'exec/nodes',
  6.        'exec/lists'
  7.  
  8. ->define DCLIST to make EasyGUI's gadget list more readable!
  9. EXPORT CONST DCLIST=PLUGIN
  10.  
  11. EXPORT OBJECT dclistview_plugin OF plugin
  12.   disabled
  13.   current
  14.   clicked
  15. PRIVATE
  16.   listview:PTR TO gadget
  17.   label
  18.   labelhi
  19.   relx, rely
  20.   execlist
  21.   maxnode
  22.   key
  23.   second1, micros1
  24.   second2, micros2
  25.   vers
  26. ENDOBJECT
  27.  
  28. PROC dclistview(label=NIL,relx=0,rely=0,execlist=NIL,current=0,key=NIL,disabled=FALSE) OF dclistview_plugin
  29.   self.label:=IF label THEN label ELSE NIL
  30.   self.relx:=IF relx>=5 THEN relx ELSE 5
  31.   self.rely:=IF rely>=2 THEN rely ELSE 5
  32.   self.execlist:=execlist
  33.   self.maxnode:=max_node(execlist)
  34.   self.current:=IF current>=0 THEN current ELSE -1
  35.   self.disabled:=disabled
  36.   key:= tolower(key)
  37.   self.key:=IF isalpha(key) THEN key ELSE NIL
  38.   self.second1:=NIL
  39.   self.second2:=NIL
  40.   self.micros1:=NIL
  41.   self.micros2:=NIL
  42.   self.vers:=KickVersion(39)
  43. ENDPROC
  44.  
  45. PROC end() OF dclistview_plugin IS EMPTY
  46.  
  47. PROC min_size(ta,fh) OF dclistview_plugin
  48.   self.labelhi:=IF self.label THEN fh+5 ELSE 0
  49. ENDPROC Max(textlen_key(self.label,ta,self.key),self.relx*fh), self.rely*fh+self.labelhi+5
  50.  
  51. PROC will_resize() OF dclistview_plugin IS (RESIZEX OR RESIZEY)
  52.  
  53. PROC gtrender(gl,vis,ta,x,y,xs,ys,w) OF dclistview_plugin HANDLE
  54.   self.listview:=CreateGadgetA(LISTVIEW_KIND,gl,
  55.                  [x,y+self.labelhi,xs,ys-self.labelhi,self.label,
  56.                      ta,0,0,vis,NIL]:newgadget,
  57.                  [GTLV_LABELS, self.execlist,
  58.                   GA_DISABLED, self.disabled,
  59.                   IF self.key THEN GT_UNDERSCORE ELSE TAG_IGNORE, "_",
  60.                   GTLV_SHOWSELECTED, NIL,
  61.                   GTLV_SELECTED, self.current,
  62.                   GTLV_TOP, Max(self.current,0),
  63.                   TAG_DONE])
  64.   IF self.listview=NIL THEN Raise("dclv") 
  65. EXCEPT DO
  66.   ReThrow()
  67. ENDPROC self.listview
  68.  
  69. PROC message_test(imsg:PTR TO intuimessage,win:PTR TO window) OF dclistview_plugin
  70. DEF islist=FALSE
  71. IF ((imsg.class=IDCMP_VANILLAKEY) AND Not(self.disabled)) THEN RETURN (self.key=tolower(imsg.code))
  72. IF (imsg.class=IDCMP_GADGETUP)
  73.   IF islist:= (imsg.iaddress=self.listview)
  74.     self.second2:=imsg.seconds
  75.     self.micros2:=imsg.micros
  76.   ENDIF              
  77. ENDIF
  78. ENDPROC islist
  79.  
  80. PROC message_action(class,qual,code,win:PTR TO window) OF dclistview_plugin
  81. DEF newcurrent
  82. SELECT class
  83.   CASE IDCMP_VANILLAKEY
  84.     self.clicked:=FALSE
  85.     IF (qual AND (IEQUALIFIER_LSHIFT OR IEQUALIFIER_RSHIFT))
  86.       newcurrent:=Max(self.current-1, 0)
  87.     ELSE
  88.       newcurrent:=Min(self.current+1, self.maxnode)
  89.     ENDIF
  90.     IF newcurrent=self.current THEN RETURN FALSE ELSE self.current:=newcurrent
  91.     Gt_SetGadgetAttrsA(self.listview,self.gh.wnd,NIL,[GTLV_SELECTED,self.current,
  92.                                                       IF self.vers THEN GTLV_MAKEVISIBLE ELSE GTLV_TOP, self.current,
  93.                                                       TAG_DONE])
  94.   CASE IDCMP_GADGETUP
  95.     IF code=self.current
  96.       self.clicked:=(IF self.clicked THEN FALSE ELSE DoubleClick(self.second1,self.micros1,self.second2,self.micros2))
  97.     ELSE
  98.       self.current:=code
  99.     ENDIF
  100. ENDSELECT
  101.   self.second1:=self.second2
  102.   self.micros1:=self.micros2
  103.   self.second2:=NIL
  104.   self.micros2:=NIL
  105. ENDPROC TRUE
  106.  
  107. PROC setdisabled(disabled=TRUE) OF dclistview_plugin
  108.   IF self.vers
  109.     Gt_SetGadgetAttrsA(self.listview,self.gh.wnd,NIL,[GA_DISABLED,disabled,TAG_DONE])
  110.     self.disabled:=disabled
  111.     self.clicked:=FALSE
  112.   ENDIF
  113. ENDPROC
  114.  
  115. PROC setdclist(list) OF dclistview_plugin
  116.   self.maxnode:=max_node(list)
  117.   Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL, [GTLV_LABELS, list, TAG_DONE])
  118.   self.execlist:=list
  119.   self.clicked:=FALSE
  120. ENDPROC
  121.  
  122. PROC getdclist() OF dclistview_plugin IS self.execlist
  123.  
  124. PROC setdctop(top) OF dclistview_plugin IS Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL,
  125.                                                        [GTLV_TOP, top, TAG_DONE])
  126.  
  127. PROC setdccurrent(current) OF dclistview_plugin
  128.   self.current:= Bounds(current,-1,self.maxnode)
  129.   Gt_SetGadgetAttrsA(self.listview, self.gh.wnd, NIL, [GTLV_SELECTED, self.current,
  130.                                                        IF self.vers THEN GTLV_MAKEVISIBLE ELSE GTLV_TOP, Max(current,0),
  131.                                                        TAG_DONE])
  132.   self.clicked:=FALSE
  133. ENDPROC self.current
  134.  
  135. PROC max_node(list:PTR TO lh)
  136. DEF node:PTR TO ln, i=NIL
  137.   IF list>0
  138.     node:=list.head
  139.     WHILE node.succ
  140.       node:=node.succ
  141.       INC i
  142.     ENDWHILE
  143.   DEC i
  144.   ENDIF
  145. ENDPROC i
  146.  
  147.